package com.antdesignbackend.backend.form.businessAccount.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.*;

import com.antdesignbackend.backend.activiti.constant.Constants;
import com.antdesignbackend.backend.config.WebConfig;
import com.antdesignbackend.backend.form.animalOrigin.entity.AnimalOrigin;
import org.springframework.ui.Model;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import com.antdesignbackend.backend.common.web.BaseController;
import com.antdesignbackend.backend.common.returnResult.ReturnVO;
import com.antdesignbackend.backend.aop.AuthToken;
import com.antdesignbackend.backend.form.businessAccount.entity.BusinessAccount;
import com.antdesignbackend.backend.form.businessAccount.entity.entityVo.BusinessAccountVo;
import com.antdesignbackend.backend.form.businessAccount.service.BusinessAccountService;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 肉品经营台账
 *
 * @author 林宇杰
 * @email businessAccount
 * @date 2020-08-12 13:44:25
 */

@Controller
@RequestMapping("/businessAccount")
@Slf4j
public class BusinessAccountController extends BaseController{

	private static final String FUN_NAME = "肉品经营台账";//功能名称

	@Autowired
	private BusinessAccountService businessAccountService;

	@GetMapping("/index")
	@AuthToken
	public String index(Model model) {
		model.addAttribute("userType",getUserType());
		return "form/businessAccount/index";
	}


	@PostMapping("/tableSearch")
	@ResponseBody
	ReturnVO tableSearch(@RequestBody BusinessAccountVo businessAccountVo) throws SecurityException, IllegalArgumentException{
		ReturnVO result=new ReturnVO();
		List<BusinessAccount> businessAccounts=new ArrayList<>();
		QueryWrapper<BusinessAccount> wrapper =new QueryWrapper<>();
		if (businessAccountVo.getTimeInterval() != null && !businessAccountVo.getTimeInterval().equals("")){
			String[] str=businessAccountVo.getTimeInterval().split(" - ");
			String star=str[0];
			String end=str[1];
			wrapper.between("businessDate",star,end);
		}
		if(!getUserType().equals("2")){
			wrapper.eq("eid",getLoginEnterpriseId());
		}
		wrapper.orderByDesc("businessDate").orderByDesc("createTime");
		//先统计满足条件的数据总数，因为sql 不包括排序
		int total=businessAccountService.count(wrapper);
		result.setTotal(total);
		System.out.println("*******************************满足条件的数据有："+total);
		//再查询
		if(total>=0)
		{
			businessAccounts=businessAccountService.page(new Page<BusinessAccount>(businessAccountVo.getPageIndex(),businessAccountVo.getPageSize()),wrapper).getRecords();
			for(BusinessAccount businessAccount:businessAccounts){
				businessAccount.setPhoto(WebConfig.host+"images/"+businessAccount.getPhoto());
			}
		}
		result.setData(businessAccounts);
		return result;
	}

	@GetMapping("/getById/{id}")
	@ResponseBody
	public	BusinessAccount getById(@PathVariable(name = "id") String id) {
		BusinessAccount obj = businessAccountService.getById(id);
		return obj;
	}

	@PostMapping("/save")
	@ResponseBody
	public ReturnVO save(@RequestBody BusinessAccount businessAccount){
		ReturnVO result = new ReturnVO();

//		businessAccount.setTypes(Constants.PENDINGTRIAL);//审批中
		businessAccount.setCreateBy(getLoginUserId());
		businessAccount.setCreateTime(new Date());
		businessAccount.setEid(getLoginEnterpriseId());
		try {
			businessAccountService.save(businessAccount);
		}catch (Exception e){
			result.setMessage("保存失败！");
			result.setCode("500");
		}
		return result;
	}

	@PostMapping("update")
	@ResponseBody
	public ReturnVO updateById(@RequestBody BusinessAccount businessAccount){
		ReturnVO result = new ReturnVO();
//		businessAccount.setTypes(Constants.PENDINGTRIAL);//审批中
		businessAccount.setCreateBy(getLoginUserId());
		businessAccount.setCreateTime(new Date());
		businessAccount.setEid(getLoginEnterpriseId());
		try {
			businessAccountService.updateById(businessAccount);
		}catch (Exception e){
			result.setMessage("保存失败！");
			result.setCode("500");
		}
		return result;
	}

	/**
     * 根据id删除
     */
	@DeleteMapping("/deleteById/{id}")
	@ResponseBody
	public ReturnVO deleteById(@PathVariable Serializable id) {
		ReturnVO result = new ReturnVO();
		if (businessAccountService.removeById(Integer.parseInt(id.toString())) == true) {
			result.setMessage("删除成功");
		} else {
			result.setMessage("删除失败");
			result.setCode("0");
		}
		return result;
	}
	/***
	 * 上传图片
	 * @return
	 */
	@PostMapping("/uploadImages")
	@ResponseBody
	public Map<String,String> uploadImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
		response.setContentType("text/html");
		response.setCharacterEncoding("UTF-8") ;
		long random =System.currentTimeMillis();
		String dateKey =random+"";
		String localPathDir="";
		String newFileName="";
		Map<String,String> map = new HashMap<>();
		if(!WebConfig.uploadImage.equals(""))
		{
			localPathDir=WebConfig.uploadImage;
		}
		else
		{
			localPathDir= ResourceUtils.getURL("classpath:").getPath()+"images/";
		}
		File logoSaveFile = new File(localPathDir);
		if(!logoSaveFile.exists()){
			logoSaveFile.mkdirs();
		}
		if (request instanceof MultipartHttpServletRequest) {
			MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
			Iterator iter = mr.getFileMap().values().iterator();
			if (iter.hasNext()) {
				MultipartFile file = (MultipartFile) iter.next();
				String oname = file.getOriginalFilename();
				String fileTyle=oname.substring(oname.lastIndexOf("."),oname.length());
				fileTyle=fileTyle.toLowerCase();
				newFileName=dateKey+fileTyle;
				String fileName = localPathDir+newFileName;
				if(fileTyle.equals(".png") || fileTyle.equals(".gif") || fileTyle.equals(".jpg"))
				{
					File files = new File(fileName);
					InputStream inputstream =file.getInputStream();
					byte[] bytes = new byte[1024];
					FileOutputStream outstream = new FileOutputStream(fileName);
					int index;
					while ((index = inputstream.read(bytes)) != -1) {
						outstream.write(bytes, 0, index);
						outstream.flush();
					}
					outstream.close();
					inputstream.close();
				}
			}
		}
		if(newFileName!=null && !newFileName.equals(""))
		{
			map.put("url",newFileName);
			map.put("httpUrl",WebConfig.host+"images/"+newFileName);
		}
		// System.out.println("return:"+localPathDir+newFileName);
		return map;
	}
}
